package 尚硅谷多线程2;
/*死锁的列子
* 1.死锁的解释，不同的线程分别占用对方需要的同步资源不放弃，都在等待这对方放弃自己需要的同步资源，就形成了线程的死锁
* 2.我们使用同步时，要避免死锁问题
* */
public class ThreadTest {
    public static void main(String[] args) {
        StringBuffer s1= new StringBuffer();
        StringBuffer s2=new StringBuffer();
        new Thread(){
            @Override
            public void run(){
                synchronized(s1){//第一把锁
                    s1.append("a");
                    s2.append("1");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (s2){//第二把锁
                        s1.append('b');
                        s2.append('2');
                        System.out.println(s1);
                        System.out.println(s2);
                    }
                }
            }}.start();
        new Thread(
                 new Runnable() {
                    @Override
                    public void run() {
                        synchronized(s2){//第一把锁
                            s1.append('c');
                            s2.append('3');
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            synchronized(s1){//第二把锁
                                s1.append('d');
                                s2.append('4');
                                System.out.println(s1);
                                System.out.println(s2);
                            }
                        }
                    }
                }
        ).start();

    }
}
